package com.ld.poetry.aop;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 登录检查注解
 * 
 * 该注解用于标记需要进行登录验证的方法，配合 {@link LoginCheckAspect} 切面使用。
 * 通过 value 参数可以指定方法需要的权限级别，系统会根据用户的权限类型进行验证。
 * 
 * 权限级别说明：
 * 0 - 管理员权限：需要用户类型为管理员（USER_TYPE_ADMIN）或开发者（USER_TYPE_DEV）
 * 1 - 开发者权限：需要用户类型为开发者（USER_TYPE_DEV）
 * 2 - 普通用户权限：所有已登录用户都可以访问
 * 
 * 使用示例：
 * {@code
 * @LoginCheck(value = 0)  // 需要站长权限
 * public void adminMethod() {
 *     // 方法实现
 * }
 * 
 * @LoginCheck(value = 1)  // 需要开发者权限
 * public void devMethod() {
 *     // 方法实现
 * }
 * 
 * @LoginCheck  // 默认需要普通用户权限
 * public void userMethod() {
 *     // 方法实现
 * }
 * }
 * 
 * @author sara
 * @since 2021-08-12
 */
@Target(ElementType.METHOD)     // 该注解只能用于方法上
@Retention(RetentionPolicy.RUNTIME)  // 注解在运行时可见
public @interface LoginCheck {
    /**
     * 指定方法需要的权限级别
     * 
     * @return 权限级别，默认为2（普通用户权限）
     * @see com.ld.poetry.enums.PoetryEnum#USER_TYPE_ADMIN
     * @see com.ld.poetry.enums.PoetryEnum#USER_TYPE_DEV
     */
    int value() default 2;
}
